#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright @ 2014 OPS, Qunar Inc. (qunar.com)
#
# Author: tingfang.bao <tingfang.bao@qunar.com>
# DateTime: 15-3-6 上午11:43
"""
Flask中Jinja２的默认设置
1. .html, .htm, .xml默认转义开启
2. 每个模板可以使用 {% autoescape %}自主控制是否转义
3. 提供了一些全局方法和帮助方法

在Flask页面模板上可以直接访问的对象
1. config：　Flask的app对象的配置对象
2. request: 本次http请求对象
3. session: 本次会话对象
4. g: 与请求关联的容器对象
5. url_for()
6. get_flashed_messages() 注意返回的是list

Jinjia2有宏的高级应用，如果这些宏需要访问上面６个对象，需要使用
{% from '_helper.html' import my_macro with context %}

标准过滤器　（由JinJia2提供）
tojson():
    ＜script stype="text/javascript">
        method1({{ user.username|tojson|safe}})
    </script>

在模板中自主控制是否转义,参看下面的实例
{% autoescape false%}
    <p>autoescaping is disabled here</p>
    <p>{{ will_not_be_escaped }}</p>
{% endautoescape %}


注册自定义的过滤器,参看下面的实现

上下文处理器


"""

from flask import Flask, render_template

app = Flask(__name__)


# 注册过滤器方式１使用装饰器注册reverse过滤器
@app.template_filter('reverse')
def reverse_filter(s):
    return s[::-1]


# 注册过滤器方式２　注册到jinjia的环境变量
def reverse_func(s):
    return s[::-1]


app.jinja_env.filters['reverse_func'] = reverse_func


# 给模板注册上下文变量和方法

def format_price(amount, currency=u'$'):
    return u'{0:.2f}{1}'.format(amount, currency)


@app.context_processor
def default_context_processor():
    return {
        "sec_info": u"小秘密",
        "price_f": format_price
    }


@app.route("/")
def index():
    return render_template("index.html")


@app.route("/autoescape")
def autoescape():
    return render_template("autoescape.html", name="<strong>baotingfang</strong>")

@app.route("/context_processor")
def context_processor():
    return render_template("context_processor.html")

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=8080)


